/************************************************************
 * Project Name         [Thinking_In_Java]
 * File Name            [FileCreateUtil.java]
 * Creation Date        [07-Jul-2014]
 * 
 * Copyright© ge.y.yang@gmail.com All Rights Reserved
 * 
 * Work hard, play harder, think big and keep fit
 ************************************************************/
package pkg_09_io.utility;

import java.io.File;
import java.io.IOException;

/**
 * 文件创建工具
 * 
 * @author 不落的太阳(Sean Yang)
 * @version 1.0
 * @since JDK 6
 * 
 */
public class FileCreateUtil {

	/**
	 * 创建单个文件
	 * 
	 * @param destFileName
	 *            目标文件名
	 * @return 创建成功返回true, 创建失败返回false
	 */
	public static boolean createFile(String destFileName) {
		File file = new File(destFileName);
		// 判断文件是否存在, 存在则创建失败
		if (file.exists()) {
			System.out.println("创建单个文件" + destFileName + "失败, 目标文件已存在! ");
			return false;
		}
		// 判断文件是否为目录, 是目录则创建失败
		if (destFileName.endsWith(File.separator)) {
			System.out.println("创建单个文件" + destFileName + "失败, 目标文件不能为目录! ");
			return false;
		}
		// 判断目标文件所在的目录是否存在
		if (file.getParentFile() != null && !file.getParentFile().exists()) {
			// 如果目标文件所在目录不存在则创建
			System.out.println("目标文件所在目录不存在, 准备创建");
			if (!file.getParentFile().mkdirs()) {
				System.out.println("创建目标目录失败! ");
				return false;
			}
		}

		try {
			if (file.createNewFile()) {
				System.out.println("创建单个文件" + destFileName + "成功! ");
				return true;
			} else {
				System.out.println("创建单个文件" + destFileName + "失败! ");
				return false;
			}
		} catch (IOException e) {
			e.printStackTrace();
			System.out.println("创建单个文件" + destFileName + "失败" + e.getMessage());
			return false;
		}
	}

	/**
	 * 创建目录
	 * 
	 * @param destDirName
	 *            目标目录名
	 * @return 目录创建成功返回true, 创建失败返回false
	 */
	public static boolean createDirectory(String destDirName) {
		File directory = new File(destDirName);
		if (directory.exists()) {
			System.out.println("创建目录" + destDirName + "失败, 目录已存在! ");
			return false;
		}
		// 判断文件是否为目录, 如果不是目录, 将其转换为目录
		if (!destDirName.endsWith(File.separator)) {
			destDirName = destDirName + File.separator;
		}
		// 创建目标目录
		if (directory.mkdirs()) {
			System.out.println("创建目录" + destDirName + "成功! ");
			return true;
		} else {
			System.out.println("创建目录" + destDirName + "失败! ");
			return false;
		}
	}

	/**
	 * 创建临时文件
	 * 
	 * @param prefix
	 *            临时文件的前缀
	 * @param suffix
	 *            临时文件的后缀
	 * @param dirName
	 *            临时文件所在的目录, 如果输入为null,则在当前目录下创建临时文件
	 * @return 如果创建成功返回true, 如果创建失败返回false
	 */
	public static boolean createTempFile(String prefix, String suffix,
			String dirName) {
		@SuppressWarnings("unused")
		File tempFile = null;
		// 当用户输入的目录为null时, 在当前路径创建临时文件
		if (dirName == null) {
			try {
				tempFile = File.createTempFile(prefix, suffix);
				return true;
			} catch (IOException e) {
				e.printStackTrace();
				System.out.println("创建临时文件失败! ");
				return false;
			}
		} else {
			File dir = new File(dirName);
			// 如果临时文件所在的目录不存在, 首先创建
			if (!dir.exists()) {
				if (FileCreateUtil.createDirectory(dirName)) {
					System.out.println("创建目录成功");
				}
			}
			try {
				tempFile = File.createTempFile(prefix, suffix, dir);
				return true;
			} catch (IOException e) {
				e.printStackTrace();
				System.out.println("创建临时文件失败! ");
				return false;
			}
		}
	}
}
